package com.wildeman.tokati.android;

import java.util.List;

import net.londatiga.android.ActionItem;
import net.londatiga.android.QuickAction;

import com.wildeman.tokati.constantes.Constantes;
import com.wildeman.tokati.core.Grupo;
import com.wildeman.tokati.db.DataHelper;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;

public class ListaGruposActivity extends Activity 
{
	//BBDD
	private DataHelper dh;

	//Log
	private final String TAG = "ListaGrupos";
	
	private Grupo grupoSeleccionado;
	private int mSelectedRow = 0; //elemento de la lista seleccionado
	private List<Grupo> listagrupos;
	private Button botAgrGrupo;
	private TextView txtTitulo; 
	private boolean mostrarGruposFavoritos = false; //si es true se filtran los grupos por aquellos marcados como favoritos
	
	
	//Widgets y views de la actividad
	ListView lista;
	private ImageView mMoreIv = null;
	
	ListaGruposAdapter adaptador = null;
	
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listagrupos);
        
        //recuperamos el flag que indica si se deben mostrar los grupos favoritos
        mostrarGruposFavoritos = getIntent().getBooleanExtra(Constantes.LISTAR_FAVORITOS, false);
        Log.d(TAG, "Mostrar grupos favoritos: " + mostrarGruposFavoritos);
        
        //Capturamos los controles de la actividad
        lista =  (ListView) findViewById(R.id.listViewGrupos);
        
        //Add action item
        ActionItem elimAction = new ActionItem();
		
        elimAction.setTitle("Eliminar");
        elimAction.setIcon(getResources().getDrawable(R.drawable.borrar));

		//Accept action item
		ActionItem favAction = new ActionItem();
		
		favAction.setTitle("Marcar como\nfavorito");
		favAction.setIcon(getResources().getDrawable(R.drawable.esfavorito));
		
		//Upload action item
		ActionItem editAction = new ActionItem();
		
		editAction.setTitle("Modificar");
		editAction.setIcon(getResources().getDrawable(R.drawable.editar));
		
		final QuickAction mQuickAction 	= new QuickAction(this);
		
		mQuickAction.addActionItem(elimAction);
		mQuickAction.addActionItem(favAction);
		mQuickAction.addActionItem(editAction);
		
		//Boton agregar grupo
		botAgrGrupo = (Button) findViewById(R.id.buttonCabAgregarGrupo);
		txtTitulo = (TextView) findViewById(R.id.textTituloListGrupos);
		
		//Si estamos en la lista de grupos favoritos, no se muestra el botón de agregar
		if (mostrarGruposFavoritos)
		{
			botAgrGrupo.setVisibility(View.GONE);
			txtTitulo.setText(R.string.listagruposfavoritos_titulo);
		}
		
        /*---------------------------------------------------------------------------
         * captura del evento de pulsación el boton de la cabecera
         *--------------------------------------------------------------------------*/
        botAgrGrupo.setOnClickListener(new View.OnClickListener() 
        {
			public void onClick(View v) 
			{
        		//Invoca la activodad Grupo
        		mostrarNuevoGrupo(false);
			}
		});
        
        /*---------------------------------------------------------------------------
         * captura del evento de pulsación en un elemento de la lista
         *--------------------------------------------------------------------------*/
        lista.setOnItemClickListener(new ListView.OnItemClickListener() 
        {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int i, long l) 
            {
            	mSelectedRow = i;
            	grupoSeleccionado = listagrupos.get(i);
            	Log.d(TAG, "Grupo seleccionado: " + grupoSeleccionado.toString());
            	
            	//invocamos la actividad que muestra el detalle del grupo
            	mostrarGrupo();
            }
        });
        
        /*---------------------------------------------------------------------------
         * captura del evento de pulsación larga en un elemento de la lista
         *--------------------------------------------------------------------------*/
        lista.setOnItemLongClickListener(new ListView.OnItemLongClickListener() 
        {
            @Override
            public boolean onItemLongClick(AdapterView<?> a, View v, int i, long l) 
            {
            	mSelectedRow = i;
            	grupoSeleccionado = listagrupos.get(i);
            	Log.d(TAG, "Grupo seleccionado: " + grupoSeleccionado.toString());
            	
            	mQuickAction.show(v);
				
				//change the right arrow icon to selected state 
				mMoreIv = (ImageView) v.findViewById(R.id.imageViewMore);
				mMoreIv.setImageResource(R.drawable.ic_list_more_selected);
				
				return true;

            }
        });
        
        /*---------------------------------------------------------------------------
         * captura del evento de pulsación en un item del quickAction
         *--------------------------------------------------------------------------*/
		mQuickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() 
		{			
			@Override
			public void onItemClick(int pos) {
				
				if (pos == 0)  //Eliminar grupo 
				{
					dh.eliminarGrupo(grupoSeleccionado.getIdGrupo());
					adaptador.remove(grupoSeleccionado);
					
					Toast.makeText(ListaGruposActivity.this, "Grupo eliminado", Toast.LENGTH_SHORT).show();
				} 
				else if (pos == 1)  //Marca como favorito
				{
					grupoSeleccionado.setFavorito(!grupoSeleccionado.isFavorito());
					dh.marcaGrupoFavorito(grupoSeleccionado.getIdGrupo(), grupoSeleccionado.isFavorito());
					adaptador.notifyDataSetChanged();
					
					//Toast.makeText(ListaGruposActivity.this, "Grupo marcado como favorito", Toast.LENGTH_SHORT).show();
				} 
				else if (pos == 2) 
				{ 
					mostrarNuevoGrupo(true);
				}	
			}
		});
		
		
        
		/*---------------------------------------------------------------------------
         * captura del evento cuando se cierra el quickAction
         *--------------------------------------------------------------------------*/
		mQuickAction.setOnDismissListener(new PopupWindow.OnDismissListener() 
		{			
			@Override
			public void onDismiss() {
				mMoreIv.setImageResource(R.drawable.ic_list_more);
			}
		});

	}
    
    /** Called when the activity comes to the foreground */
	@Override
	protected void onResume() 
	{
		super.onResume();
		
		//Instancia de la BBDD
        dh = new DataHelper(this);
        
        //Obtenemos el listado de grupos
       	Log.d(TAG, "Consulta lista de grupos...");
       	Log.d(TAG, "Mostrar grupos favoritos: " + mostrarGruposFavoritos);
       	
        if (mostrarGruposFavoritos)
        {
        	listagrupos = dh.listarGruposFavoritos();
        }
        else
        {
        	listagrupos = dh.listarGrupos();
        }
       	
        adaptador = new ListaGruposAdapter(this,listagrupos);
        lista.setAdapter(adaptador);
	}
	
	/** Called when the activity another activity comes in front od this activity */
	@Override
	protected void onPause() 
	{
		// TODO Auto-generated method stub
		super.onPause();
		dh.cerrar();
	}

	/**
     * Incova a la actividad NuevoGrupoActivity 
     */    
    private void mostrarNuevoGrupo(boolean mostrarEnEdicion)
    {
    	Intent nuevoGrupoAct = new Intent(getBaseContext(), NuevoGrupoActivity.class);
    	
    	if (mostrarEnEdicion)
    	{
    		nuevoGrupoAct.putExtra(Constantes.EDITAR_GRUPO, true);
    		nuevoGrupoAct.putExtra(Constantes.GRUPO, grupoSeleccionado);
    	}
    	
    	startActivity(nuevoGrupoAct);
    }
    


	/**
     * Incova a la actividad GrupoActivity 
     */
    private void mostrarGrupo()
    {
    	//Actualiza la lista de miembros del grupo
    	grupoSeleccionado.setIntegrantes( dh.listarMiembrosGrupo(grupoSeleccionado.getIdGrupo()) );
    	
    	Intent grupoAct = new Intent(getBaseContext(), GrupoActivity.class);
    	grupoAct.putExtra(Constantes.GRUPO, grupoSeleccionado);
    	startActivity(grupoAct);
    }
    
    

}

